package Cn.edu.zafu.bigdata.cxy;

public abstract class Shape {
    public abstract double area();
    public abstract double perimeter();
    // final方法，用于打印形状的类型、面积和周长
    public final void display() {
        System.out.println("Area: " + area());
        System.out.println("Perimeter: " + perimeter());
    }
}
// Circle 类，继承自 Shape
class Circle extends Shape {
    double radius;

    public Circle(double radius) {
        this.radius = radius;
    }

    // 实现 area() 方法
    @Override
    public double area() {
        return Math.PI * radius * radius;
    }

    // 实现 perimeter() 方法
    @Override
    public double perimeter() {
        return 2 * Math.PI * radius;
    }
}

// Rectangle 类，继承自 Shape
class Rectangle extends Shape {
    double length;
    double width;

    public Rectangle(double length, double width) {
        this.length = length;
        this.width = width;
    }

    // 实现 area() 方法
    @Override
    public double area() {
        return length * width;
    }

    // 实现 perimeter() 方法
    @Override
    public double perimeter() {
        return 2 * (length + width);
    }
}
class TestShape {
    public static void main(String[] args) {
        // 创建 Circle 和 Rectangle 的实例
        Shape circle = new Circle(5.0);
        Shape rectangle = new Rectangle(4.0, 6.0);

        // 调用每个实例的 display() 方法
        System.out.println("Circle:");
        circle.display();

        System.out.println("Rectangle:");
        rectangle.display();
    }
}
// 尝试创建一个 final 类
final class FinalClass {
    public void method() {
        System.out.println("Final class method");
    }
}

// 尝试创建一个 final 方法
class FinalMethodClass {
    public final void finalMethod() {
        System.out.println("Final method");
    }
}

// 使用 final 关键字修饰一个变量
class FinalVariableClass {
    final int value = 10;

    public void modifyValue() {

    }
}

class TestFinal {
    public static void main(String[] args) {
        // 尝试实例化 final 类
        FinalClass finalClass = new FinalClass();
        finalClass.method();

        // 尝试重写 final 方法
        FinalMethodClass finalMethodClass = new FinalMethodClass();
        finalMethodClass.finalMethod();

        // 使用 final 关键字修饰变量
        FinalVariableClass finalVariableClass = new FinalVariableClass();
        System.out.println("Final variable value: " + finalVariableClass.value);
        finalVariableClass.modifyValue();
        System.out.println("Final variable value after modification: " + finalVariableClass.value);
    }
}